using System;
using System.Collections.Generic;
using System.Collections;

public class Config {
	public static int level = 0;
	public static ArrayList bases = new ArrayList();
	Dictionary<string,int> name2code;
	string[] code2name = {
		"blank",
		"base",
		"brick_fragment",
		"fix",
		"grass",
		"half_brick_left",
		"half_brick_left_conner",
		"half_brick_right",
		"half_brick_right_conner",
		"half_brick_top",

// a
		"half_brick_down",

// a
		"half_iron_left",
// a
		"half_iron_right",
// a
		"half_iron_top",
// a
		"half_iron_down",
// a	
		"iron_frag",

		"iron",
		"river",
		"snow",
		"T",
		"T_",
		"brick",

		// 砖块碎片
		"frag1",
		"frag2",
		"frag3",
		"frag4",
		"frag5",
		"frag6",
		"frag7",
		"frag8",
		"frag9",
		"frag10",
		"frag11",
		"frag12",
		"frag13",
		"frag14",
		"frag15",
		"frag16",

		"p1tank",
		"p2tank",

		"bullet",


		"enemy1",

		"NetBullet",
		"Netp1tank",
		"Netp2tank",

		"enemy1_ai_p1",
		"enemy1_ai_p2",


		"enemy2_ai_p1",
		"enemy2_ai_p2",
		"enemy3_ai_p1",
		"enemy3_ai_p2",
		"enemy4_ai_p1",
		"enemy4_ai_p2",



		"buy1",
		"buy2",
		"buy3",
		"buy4",
		"levelup",

		"wuzi25",
		"wuzi40",
		"wuzi50",
	};
	int[] tankCanPass = {
		1,
		0,
		0,
		1,
		1,
		0,
		0,
		0,
		0,
		0,

// a
		0,
		0,
		0,
		0,
		0,
		0,

		0,
		2,	// 3级坦克为1
		1,
		1,
		1,
		0,

		// 砖块碎片
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,

		0,
		0,

		0,



		0,
		0,//网络子弹不能被穿过
		0,//tank 下同
		0,

		0,
		0,


		0,
		0,
		0,
		0,
		0,
		0,




		1,
		1,
		1,
		1,
		1,

		1,
		1,
		1
	};
	int[] bulletCanPass = {
		1,
		0,
		0,
		1,
		1,
		0,
		0,
		0,
		0,
		0,

// a
		0,
		0,
		0,
		0,
		0,
		0,

		0,
		1,
		1,
		1,
		1,
		0,

		// 砖块碎片
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,
		0,

		0,
		0,

		0,




		0,//AI坦克不能被通过
		0,//网络子弹不能被子弹通过
		0,//坦克不能通过
		0,

		0,
		0,



		0,
		0,
		0,
		0,
		0,
		0,


		1,
		1,
		1,
		1,
		1,


		1,
		1,
		1
	};
	int[] bulletCanDestroy = {
		0,
		1,
		1,
		0,
		0,
		1,
		1,
		1,
		1,
		1,

// a
		1,
		0,
		0,
		0,
		0,
		0,

		0,
		0,
		0,
		0,
		0,
		1,

		// 砖块碎片
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,
		1,

		1,	//!!! 自己的炮弹不能破坏自己，需要额外判断
		1,

		1,




		1,//ai坦克
		1,	//子弹
		1,	//tank
		1,

		1,
		1,


		1,
		1,
		1,
		1,
		1,
		1,





		0,
		0,
		0,
		0,
		0,


		0,
		0,
		0
	};

	public Config () {
		name2code = new Dictionary<string, int> ();
		name2code.Add("blank", 0);
		name2code.Add("base", 1);
		name2code.Add("brick_fragment", 2);
		name2code.Add("fix", 3);
		name2code.Add("grass", 4);
		name2code.Add("half_brick_left", 5);
		name2code.Add("half_brick_left_conner", 6);
		name2code.Add("half_brick_right", 7);
		name2code.Add("half_brick_right_conner", 8);
		name2code.Add("half_brick_top", 9);

// a
		name2code.Add("half_brick_down", 10);
		name2code.Add("half_iron_left", 11);
		name2code.Add("half_iron_right", 12);
		name2code.Add("half_iron_top", 13);
		name2code.Add("half_iron_down", 14);
		name2code.Add("iron_frag", 15);
		

		name2code.Add("iron", 16);
		name2code.Add("river", 17);
		name2code.Add("snow", 18);
		name2code.Add("T", 19);
		name2code.Add("T_", 20);
		name2code.Add("brick", 21);

		// 砖块碎片
		name2code.Add("frag1", 22);
		name2code.Add("frag2", 23);
		name2code.Add("frag3", 24);
		name2code.Add("frag4", 25);
		name2code.Add("frag5", 26);
		name2code.Add("frag6", 27);
		name2code.Add("frag7", 28);
		name2code.Add("frag8", 29);
		name2code.Add("frag9", 30);
		name2code.Add("frag10", 31);
		name2code.Add("frag11", 32);
		name2code.Add("frag12", 34);
		name2code.Add("frag13", 34);
		name2code.Add("frag14", 35);
		name2code.Add("frag15", 36);
		name2code.Add("frag16", 37);

		name2code.Add ("p1tank", 38);
		name2code.Add ("p2tank", 39);

		name2code.Add ("bullet", 40);
		name2code.Add ("enemy1",41);
		name2code.Add ("NetBullet",42);
		name2code.Add ("Netp1tank",43);
		name2code.Add ("Netp2tank",44);

		name2code.Add ("enemy1_ai_p1",45);
		name2code.Add ("enemy1_ai_p2",46);


		name2code.Add ("enemy2_ai_p1",47);
		name2code.Add ("enemy2_ai_p2",48);
		name2code.Add ("enemy3_ai_p1",49);
		name2code.Add ("enemy3_ai_p2",50);
		name2code.Add ("enemy4_ai_p1",51);
		name2code.Add ("enemy4_ai_p2",52);




		name2code.Add ("buy1", 53);
		name2code.Add ("buy2", 54);
		name2code.Add ("buy3", 55);
		name2code.Add ("buy4", 56);
		name2code.Add ("levelup", 57);


		name2code.Add ("wuzi25",58);
		name2code.Add ("wuzi40",59);
		name2code.Add ("wuzi50",60);

	}

	public string codeToName(int code) {
		return code2name [code];
	}

	public int nameToCode(string name) {
		return name2code [name];
	}

	public bool canTankPass (string name, int tankLevel) {
		if (tankCanPass [name2code [name]] == 1 || (tankCanPass [name2code [name]] == 2 && tankLevel == 3)) {
			return true;
		}
		else {
			return false;
		}
	}

	public bool canTankPass (string name) {
		return canTankPass (name, 0);
	}

	public bool canBulletPass (string name) {
		return bulletCanPass[name2code[name]] == 1;
	}

	public bool canBulletDestroy (string name) {
		return bulletCanDestroy[name2code[name]] == 1;
	}
}